// (C) Copyright 2012 Enlightv. All rights reserved.

`timescale 1ns/100ps

module sync_cell 
#(
parameter       DELAY = 2 ,
parameter       RESET_VALUE = 1'b0
)
(
    input  I_clk,
    input  I_rst_n,
    input  I_data_in,
    output O_data_out
);

/******************************************************************************
                                <localparams>
******************************************************************************/

/******************************************************************************
                              <internal signals>
******************************************************************************/
(* ASYNC_REG = "TRUE" *) reg   dff[DELAY-1:0];


integer i;
/******************************************************************************
                                <module body>
******************************************************************************/
always @(posedge I_clk or negedge I_rst_n)
    if (!I_rst_n)
        begin
            for(i=0;i<DELAY;i=i+1)
                dff[i] <= RESET_VALUE;
        end
    else
        begin
            dff[0] <= I_data_in;
            for(i=0;i<DELAY-1;i=i+1)
                dff[i+1] <= dff[i];
        end

assign O_data_out = dff[DELAY-1];

endmodule

